package comportamiento;

import componentes.Soldado;

public class RecorridoDos extends EstrategiaRecorrido{
	private int cont;
	private int maxCont;
	private Boolean estaEnMovimiento;
	private Boolean mitadDeEspera;
	
	
	/*
	 * el soldado debe situarse en la altura y direccion correcta para que
	 * se dirija directamente a la primera coordenada
	 * no deben haber obstaculos en el medio porque es solo un rebote
	 * */	
	
	public RecorridoDos(int maxCont) {
		super();
		this.maxCont = maxCont; 
		this.cont = 0;
		this.estaEnMovimiento = true;
		this.mitadDeEspera = false;
		
	}
	
	// nuevo control para coordenadas
	
	public void controlCoordenadas(Soldado s){
		
		if(this.estaEnMovimiento){
			
			if(s.hayColisionConCoordenada()){
				
				System.out.println("entre");
				
				this.estaEnMovimiento = false;
				s.setX(s.getX2Anterior());
				s.setY(s.getY2Anterior());
			}
		}
		else{
			this.controlEnLimite(s);
		}
	}
	
	//
	
	public void controlRecorrido(Soldado s){
		
		if(this.estaEnMovimiento){
			
			if(this.getCont() > 0){
				this.decContador();
			}
			else{
				if(s.hayColisionConEspera()){
					
					this.setCont(this.maxCont);
					
					this.estaEnMovimiento = false;
					
					s.setX(s.getX2Anterior());
					s.setY(s.getY2Anterior());
				}
			}
		}
		else{
			this.controlEnLimite(s);
		}
	}
	
	public void controlEnLimite(Soldado s){
		
		this.decContador();
		if(this.getCont() < 10){
			
			//this.cambiarDireccion(s);
			this.cambiarDireccionSiguienteReloj(s);
			this.estaEnMovimiento = true;
			this.mitadDeEspera = false;
		}
		
		if((this.getCont() == (this.maxCont/2)) && (this.getMitadDeEspera() == false)){
			this.mitadDeEspera = true;
			this.cambiarDireccionSiguienteReloj(s);
		}
	}
	
	public void decContador(){
		if(this.getCont() > 0){
			this.setCont(this.getCont() - 1);
		}
	}
	
	public void cambiarDireccion(Soldado s){
		
		s.setDireccion((s.getDireccion().dirOpuesta())); 
		s.setCambioDir(true);
	}
	
	public void cambiarDireccionSiguienteReloj(Soldado s){
		
		s.setDireccion((s.getDireccion().dirSiguienteReloj())); 
		s.setCambioDir(true);
	}
	
	// accesos
	//////////////////////////////////

	public int getCont() {
		return cont;
	}

	public void setCont(int cont) {
		this.cont = cont;
	}

	public Boolean getEstaEnMovimiento() {
		return estaEnMovimiento;
	}

	public void setEstaEnMovimiento(Boolean estaEnMovimiento) {
		this.estaEnMovimiento = estaEnMovimiento;
	}

	public Boolean getMitadDeEspera() {
		return mitadDeEspera;
	}

	public void setMitadDeEspera(Boolean mitadDeEspera) {
		this.mitadDeEspera = mitadDeEspera;
	}
	
}
